423 B$=SPACE$(38):LOCATE 1,1:FOR I=1 TO 23:PRINT B$:NEXT:PRINT B$;'Erases logo
425 CLOSE#1:OPEN COMM$ AS #1:PRINT #1,MODMINIT$
435 '
500 ' ********* M A I N I N P U T / O U T P U T ***********
505 '
510 ' -- Keyboard
517 IF TMP$="" AND SP THEN XPOS=1
520 B$=INKEY$:IF B$="" THEN 560
530 IF B$=BS$ THEN CCNT=CCNT-1:IF ECH AND NOT SP THEN GOSUB 2655:IF PR THEN PR$= PR$+B$:GOSUB 800:GOTO 555 ELSE 555 ELSE 555 ' "not sp" fixes BSpc if ECHO ON in splt-scrn mode. (by -Dennis Cheves-)
552 IF FKFLG AND B$="{" THEN FKFLG=0:FK=FK+1:GOTO 7575
553 IF B$=CHR$(27) AND FKFLG THEN GOSUB 7620
555 IF SP AND LEN(B$)<2 THEN 11000 ELSE IF SP AND LEN(B$)>1 THEN B2$=B$
558 PRINT#1,B$;
559 IF FCR$=D$(30) THEN SOUND SD,5:SOUND SD,1
599 '
600 ' -- Comm Port
612 IF SP AND LEN(B2$)<2 THEN LOCATE ROW,COL,0 ELSE IF SP AND LEN(B2$)>2 THEN LOCATE FROW,FCOL,1
615 B2$="":A$=INPUT$(LOC(1),#1):IF NS=0 THEN 635
625 P=INSTR(A$,S$(I)):IF P=0 THEN 628 ELSE A$=LEFT$(A$,P-1)+R$(I)+ RIGHT$(A$,LEN(A$)-P):GOTO 625
628 P=INSTR(A$,CHR$(0)):IF P=0 THEN 630 ELSE A$=LEFT$(A$,P-1)+ RIGHT$(A$,LEN(A$)-P):GOTO 625
650 NEXT:GOTO 656
656 IF FCR$=D$(30) AND FKFLG THEN B$="":SOUND 100,(3*18):SOUND SD,1:FX$=INKEY$: IF FX$=CHR$(27) THEN GOSUB 7620:FX$="":GOTO 515 ELSE IF FX$="]" THEN 656
657 IF FCR$=D$(30) AND FKFLG THEN FCR$="":FK=FK+1:GOTO 7575
658 IF INSTR(RIGHT$(A$,4),FCR$)<>0 AND FKFLG THEN FKFLG=0:FK=FK+1:GOTO 7575
659 FROW=CSRLIN:FCOL=POS(0)
660 IF SP THEN ROW=CSRLIN:COL=POS(0):LOCATE 25,XPOS,1
661 IF PR THEN PR$=PR$+A$:GOSUB 800
699 '
700 ' -- Check Status
703 IF TMP$="" AND SP THEN XPOS=1:LOCATE 25,XPOS,1 'to corr psbl csr pos err
704 IF FEX THEN FEX=0:GOSUB 2800
799 '
800 ' -- Printer buffer
825 '
1000 ' ***** ALT-KEY INPUT *****
1005 '
1080 '
1200 ' ***** ALT-KEY DISPLAY *****
1205 '
1500 ' ********** E X T E N D E D C O D E S **********
1505 '
1516 ' -- Reserved for IBM 3101 Emulation (PCTCMW.MRG) lines 1517-18-19
1517 '
1518 '
1519 ' -- Cursor up-dn/Home/Receive/View/Transmit
1530 IF EX=71 THEN 2000 'Home = Commands
1535 IF EX=19 OR EX=81 THEN EX=19:GOTO 3000 'Alt-R,PgDn = Receive
1540 IF EX=47 THEN 3400 'Alt-V = View
1545 IF EX=20 OR EX=73 THEN EX=20:GOTO 3200 'Alt-T,PgUp = Transmit
1548 '
1549 ' -- Parms/Dialing/Function key setting
1550 IF EX=25 THEN 5000 'Alt-P = Com Parms
1555 IF EX=32 THEN 6000 'Alt-D = Dial Directory
1560 IF EX=36 OR EX=37 THEN 7000 'Alt-J or K = F-Key Setting
1564 '
1565 ' -- Function-Keys/Alt-Keys
1570 IF EX>=59 AND EX<=68 THEN FK$=K$(EX-58):GOTO 7475 'F1-F10
1575 IF EX>=104 AND EX<=113 THEN FK$=K$(EX-93):GOTO 7475 'ALT-F1/F10
1580 IF EX>=84 AND EX<=103 THEN FK$=K$(EX-63):GOTO 7475 'CTL & SHFT-F1/F10
1585 IF EX>=120 AND EX<=129 THEN FK$=ALT$(EX-119):GOTO 7475 'ALT-1/0
1590 IF EX=15 THEN:BEEP:LOCATE 25,1:PRINT" set Alt-(1-0): ";CHR$(181);:ALTSET= -1:GOTO 1000 'Shft-TB used instead of Alt-= to avoid Prokey. Level # now in start-up screen -- Jim Gainsley
1660 IF EX=46 THEN IF NOT SP THEN PRINT CHR$(12):GOSUB 2800:GOTO 515 ELSE CLS: LOCATE 25,1,1:PRINT TMP$;:XPOS=LEN(TMP$)+1:ROW=1:COL=1:FROW=1:FCOL=1:GOTO 515
1675 ' (Shft-Tab (EX=15) now used for Alt-1/0 Temp Keys)
1681 ' -- More Extended Codes can go here (see p.G-6 IBM BASIC manual)
1682 IF EX=119 THEN 10000 'Ctrl-Home=Split-Screen
1684 ' Resvd for IBM 3101 Emul. per PCTCMW. Call is to EX=24 (Alt-O)
1685 IF EX=35 THEN GOTO 1850 'Alt-H:Hangup After Connect (Hayes mode)
3010 IF RC THEN RC=0:RC$="":BEEP:PRINT:PRINT"===RECEIPT OF FILE ";RCV$; " TERMINATED===":GOSUB 3247:PRINT:GOSUB 2700:GOSUB 2800:IF MSG THEN PRINT#1,BL$;CR$;"===FILE RECEIVED===":GOTO 515 ELSE 515
3015 RC$="":BEEP:PRINT:PRINT"===RECEIVE A FILE===":GOTO 3650
3030 MSG$=" Receiving "+RCVX$+" (ALT-R or PgDn to Terminate)":GOSUB 2600
3107 ' ***** FIND FREE DISK SPACE WITH Alt-V -- Jack Wright *****
3108 ' -- Calls to DSK.OBJ
3109 '
3110 A=2:B=0:C!=0:IF DRV$="A:" OR DRV$="a:" THEN A=1
3115 IF DRV$="C:" OR DRV$="c:" THEN A=3
3132 NAME DRV$+"1" AS DRV$+"1" 'Disk must be in drive
3135 CALL DSK(A,B):C!=(C!+B)*512 'see p. 110, compiler manual
3140 PRINT DRV$;" Drive Free Space = ";C!
3145 RETURN
3200 ' ***** TRANSMIT A FILE *****
3205 '
3210 IF TR THEN TR=0:TR$="":MSG1$="===TRANSMISSION OF FILE ":MSG2$= " TERMINATED===":GOSUB 3247:BEEP:PRINT:PRINT MSG1$;TRN$;MSG2$:GOSUB 2715: GOSUB 2800:IF MSG THEN PRINT#1,CR$;MSG1$;MSG2$,BL$:GOTO 515 ELSE 515
3215 IF TR THEN TR=0:TR$="":MSG1$="===END OF FILE":MSG2$="===":BEEP:PRINT: GOSUB 3247:PRINT MSG1$;" ";TRN$;MSG2$:GOSUB 2715:GOSUB 2800:IF MSG THEN PRINT#1,"65529 '";MSG1$;MSG2$;BL$:GOTO 515 ELSE 515
3220 TR$="":BEEP:PRINT:PRINT"===TRANSMIT A FILE===":GOTO 3650
3230 MSG$=" Transmitting "+TRNX$+" (ALT-T or PgUp to Terminate)":IF TR$="X" THEN MSG$=MSG$+" # of Blocks:" ELSE IF TR$="P" THEN MSG$=MSG$+" % Remng:" ELSE MSG$=MSG$+" Min. Remng:"
3247 COMM$=COMMPORT$+BAU$+","+PAR$+","+DTA$+","+STP$+COMMINIT$:CLOSE#1:OPEN COMM$ AS #1:RETURN
3400 ' ***** VIEW A FILE *****
3401 '
3405 DRV$=DRIV$:GOSUB 3110 'Shows def. drv free space automatically on Alt-V
3410 BEEP:PRINT:PRINT"===VIEW A FILE===":GOTO 3650
3415 MSG$=" Viewing "+VEWX$+" Press <space> to continue (Alt-V to terminate)" :GOSUB 2600:PRINT:PRINT:PRINT
3421 IF PR THEN LPRINT X$
3500 ' ***** FILE SPECS *****
3505 '
3520 IF LEN(Q$)>1 THEN Q=ASC(MID$(Q$,2,1)):IF Q>=59 AND Q<=68 THEN Q$=K$(Q-58) ELSE IF Q>=104 AND Q<=113 THEN Q$=K$(Q-93) ELSE IF Q>=84 AND Q<=103 THEN Q$=K$(Q-63) ELSE IF Q>=120 AND Q<=129 THEN Q$=ALT$(Q-119) ELSE BEEP:GOTO 3515
3540 IF FIL$="" THEN BEEP:PRINT"===CANCELLED===":GOSUB 2800:GOTO 515
3543 IF LEFT$(FIL$,1)="/" THEN MID$(FIL$,1,1)="?"
3570 IF Q$="B" THEN TR$="B"
3585 IF TR$="B" OR TR$="X" OR RC$="X" THEN IF DTA$<>"8" THEN BEEP:PRINT "*** Automatically converting to 8 databits for XMODEM ***"
3595 IF EX=19 THEN CLOSE#2:OPEN FIL$ FOR APPEND AS #2 ELSE CLOSE#3:OPEN FIL$ FOR INPUT AS #3
3619 '
3620 ' -- File Directory Subroutine
3640 PRINT:DRV$=LEFT$(FIL$,2):IF INSTR(FIL$,"/")=3 AND LEN(FIL$)=3 THEN GOSUB 3110:PRINT ELSE GOSUB 3110:FILES FIL$:PRINT
3815 FOR I=1 TO 24:Y$="":FOR J=1 TO 79:X=SCREEN(I,J):Y$=Y$+CHR$(X):NEXT J:PRINT #2,Y$:NEXT I:PRINT#2,STRING$(79,45);CR$;LF$;"*** PC-TALK III SCREENDUMP - " ;DATE$;" at ";TIME$;" ***";CR$;LF$;STRING$(79,61):CLOSE#2
3900 ' ***** DELETE A FILE *****
3905 '
4000 ' ***** TRANSMIT *****
4005 '
4064 '
4065 ' -- XON/XOFF Subroutine
4199 '
4200 ' -- Transmit last block
4399 '
4400 ' -- Line pacing subrout
4500 ' ***** RECEIVE with XMODEM *****
4505 '
4512 CLOSE #1:OPEN COMMPORT$+BAU$+",N,8,1"+COMMINIT$ AS 1
4539 '
4540 ' -- Check block
4629 '
4630 ' -- Terminate
4700 ' ***** TRANSMIT with XMODEM *****
4705 '
4712 CLOSE #1:OPEN COMMPORT$+BAU$+",N,8,1"+COMMINIT$ AS 1
4749 '
4750 ' -- Hold for ACK
4809 '
4810 ' -- Build Block
4839 '
4840 ' -- Terminate
4900 ' -- XMODEM Subroutines
4901 '
4920 ' -- Hold for SOH
4959 '
4960 ' -- Test for Abort
4965 B$=INKEY$:IF LEN(B$)<2 THEN RETURN ELSE Q$=MID$(B$,2,1):IF Q$=CHR$(19) OR Q$=CHR$(20) OR Q$=CHR$(73) OR Q$=CHR$(81) THEN ABORT=-1:RETURN ELSE RETURN
4969 '
4970 ' -- Purge Buffer
4979 '
4980 ' -- Set/Check Delay
5000 ' ***** COMM PARAMS *****
5005 '
5050 IF Q$="X" THEN PRINT Q$:PRINT:PRINT"(present parameters still in effect)": GOTO 5095
5095 IF MDFLG THEN RETURN ELSE PRINT GO$:GOSUB 2800:GOTO 515
5200 ' ***** NEW DEFAULTS *****
5205 '
5230 NEXT:LOCATE ,,1:IF EXIT THEN 5280 ELSE FOR I=1 TO DFNUM:DT$(I)=D$(I):NEXT
5260 GOSUB 2500:IF Q$=CHR$(27) THEN GOSUB 2655:GOSUB 2655:ABORT=-1 ELSE IF Q$<>"" THEN DT$(I)=Q$:IF DT$(I)=" " THEN DT$(I)=""
5270 GOSUB 5295:PRINT"*** New values ok (y/n)?";:Q$=INPUT$(1):PRINT Q$:GOSUB 2555:IF Q$="N" THEN GOSUB 5295:LOCATE 21,1:PRINT SPACE$(79);:LOCATE 21,1: PRINT"(Default Routine Cancelled)":GOTO 5290 ELSE FOR I=1 TO DFNUM:D$(I)= DT$(I):NEXT
5399 '
5400 ' -- Create Default File
5435 DATA Comm. port,"COM1:",Comm. init.,",CS,DS",Modem init.,,C/R subst.,}, F-Key Dly Char,~
5599 '
5600 ' -- Update Values
5799 '
5800 ' -- Default Subroutine
5815 COMM$=DCOMM$
5820 ECH=DECH:MSG=DMSG:NS=DNS:FOR J=1 TO 3:I=2*J+5:S$(J)=DS$(J):R$(J)=DR$(J): NEXT:PC$=DPC$:RETURN
6000 ' ***** DIALING DIRECTORY *****
6005 '
6024 '
6025 ' -- Write to Screen
6079 '
6080 ' -- Initial Choice
6085 LOCATE 21,1:PRINT"Enter Dir. #: | or...
6199 '
6200 ' -- Dial Entry
6299 '
6300 ' -- Manual Dialing
6305 MDFLG=0:LOCATE 7,1:PRINT"Current Comm Parameters are: ";COMM$:PRINT: PRINT "Options: 1) Use Current 2) Use Default 3) Change (1/2/3 cr=Current) ";
6306 B$=INKEY$:IF B$="" GOTO 6306 ELSE IF VAL(B$)<>1 AND VAL(B$)<>2 AND VAL(B$)<>3 AND B$<>CHR$(13) THEN BEEP:GOTO 6306 ELSE PRINT B$
6307 IF VAL(B$)=1 OR B$=CHR$(13) THEN GOSUB 5820:MCOM$=COMM$:GOTO 6308 ELSE IF VAL(B$)=2 THEN GOSUB 5820:MCOM$=DCOMM$:GOTO 6308 ELSE MDFLG=-1:GOSUB 5010: MDFLG=0:MCOM$=COMM$:GOSUB 5820
7475 ' -- Function Key & Alt Key Pacing -- by Jim Gainsley, Mpls MN, June 1984
7485 '
7495 IF INSTR(FK$,FS$)=0 THEN B$=FK$:GOTO 535 ELSE B$="":FFF=0:FKFLG=-1:FCC=1: FCR$="":FP$="":MSG$=" '{' to Send next Segment. ']' to Continue Delay. 'Esc' to Terminate.":IF NOT SP THEN GOSUB 2600
7525 FOR FK=1 TO LEN(FK$):FP$=MID$(FK$,FK,1)
7535 IF FP$<>D$(30) AND FP$<>FS$ AND FP$<>FCR$ THEN B$=B$+FP$:GOTO 7605
7545 IF NOT FFF AND FP$=FS$ THEN FCC=INSTR(FK$,FP$):FFF=-1
7555 IF FP$=FS$ THEN FCR$=MID$(FK$,(INSTR(FCC,FK$,FP$)+1),1):FCC= INSTR(FCC+1,FK$,FP$):FKFLG=-1 ' Sets FCR$ to wait-for character
7559 '
7560 ' -- Go To Main I/O & Send String Packet
7565 LOCATE ,,1:IF FCR$=D$(30) AND B$="" THEN GOTO 656 ELSE GOTO 535
7620 B$="":FKFLG=0:FCC=1:FP$="":COLOR HI,BG:LOCATE FROW,FCOL:PRINT"TERMINATED": COLOR FG,BG:SOUND 800,3:SOUND 1400,2:IF SP=0 THEN GOSUB 2800:RETURN ELSE RETURN
7999 '
8000 ' ***** REDIAL -- by Jim Gainsley, Mpls MN, July 1984 (612)338-6124
8005 '
8010 COMA=0:Q1DELAY=QDELAY 'COMA--To recognize pauses if used in DIAL$
8015 FOR I=1 TO LEN(DIAL$):IF MID$(DIAL$,I,1)="," THEN COMA=COMA+38
8020 NEXT:IX=0:CLS:V$=TIME$:LOCATE 18,4,0:PRINT"To change disconnect delay time press ";:COLOR HI,BG:PRINT"]";:COLOR FG,BG:PRINT" after ' DIALING: ' appears above, or";
8025 PRINT" you may select 33%, 50% or 66% of the current delay by pressing 1, 2, or 3.";:PRINT" (Press ESC to cancel delay selected by 1/2/3.)":LOCATE 1,1
8030 MSG$=" Press: R to RECYCLE, SPACE BAR to TERMINATE, ALT-D for DIALING DIRECTORY. ":GOSUB 2600:LOCATE 2,54:PRINT"REDIAL STARTED AT: ";:COLOR HI,BG: PRINT V$;:COLOR FG,BG:LOCATE 1,1
8035 Q1$="":Q$="":PRINT" ===REDIALING ";N$;:LOCATE 1,45:PRINT "Time at Start of This Pass: ";:COLOR HI,BG:PRINT TIME$:COLOR FG,BG: LOCATE 2,1:PRINT#1,MODM$+DIAL$:ROW=CSRLIN:COL=POS(0)
8050 LOCATE 22,4:PRINT"THIS IS TRY #: ";IX;" ELAPSED TIME THIS PASS ";I;
8055 B1$=INKEY$:IF B1$="R" OR B1$="r" GOTO 8125
8060 IF B1$="]" GOTO 8180
8065 IF B1$="1" THEN Q1DELAY=Q1DELAY*.33:GOSUB 8197 ELSE IF B1$="2" THEN Q1DELAY=Q1DELAY*.5:GOSUB 8197 ELSE IF B1$="3" THEN Q1DELAY=Q1DELAY*.66: GOSUB 8197 ELSE IF B1$=CHR$(27) THEN Q1DELAY=QDELAY:GOSUB 8197
8070 IF Q1DELAY <=7 THEN Q1DELAY=7:GOSUB 8197
8075 IF B1$=" " OR B1$=CHR$(0)+CHR$(32) THEN 8165
8080 IF LOC(1)>0 THEN Q$=INPUT$(LOC(1),1):Q1$=Q1$+Q$ ELSE 8090 'See Ln 9055
8085 IF INSTR(Q1$,MODM$+DIAL$)<>0 AND AFLG=0 THEN LOCATE ROW,COL:PRINT " ** DIALING: ";MODM$+DIAL$:PRINT" ** COM PARAMS: ";MID$(COMM$,6,10): PRINT" ** DISCONNECT DELAY PERIOD IS: "Q1DELAY:AFLG=1:ROW=CSRLIN:COL=POS(0)
8090 I=I+1
8095 IF INSTR(Q1$,CONNECT$)<>0 GOTO 8140
8100 IF INSTR(Q1$,"BUSY")<>0 OR INSTR(Q1$,"NO CARRIER")<>0 GOTO 8135
8105 SOUND SD,18.5:SOUND SD,1 'Provides elapsed time since dial completed
8110 WEND
8114 '
8115 ' -- Delay Time has Expired
8120 LOCATE ROW,COL:COLOR HI,BG:PRINT" ** DELAY PERIOD EXPIRED **";:COLOR 7,BG
8125 PRINT#1,"A":SOUND SD,30:SOUND SD,1:GOSUB 8195:CLOSE#1:OPEN COMM$ AS #1: GOTO 8030
8129 '
8130 ' -- Busy or No Carrier
8135 LOCATE ROW,COL:COLOR HI,BG:PRINT" *** LINE BUSY OR NO CARRIER ***": COLOR FG,BG:SOUND SD,26:SOUND SD,1:GOSUB 8195:GOTO 8030
8139 '
8140 ' -- Connected
8145 STRT$=TIME$:MSG$=" REMOTE COMPUTER ON LINE *** HIT ANY KEY TO PROCEED ***" :GOSUB 2600
8150 LOCATE 12,15:COLOR 31,BG:PRINT" <<< CONNECTED WITH "N$" >>>": COLOR FG,BG
8155 IF INKEY$="" THEN SOUND 600,4:SOUND 900,4:GOTO 8155 ELSE CLS:GOSUB 2800: LOCATE ,,1:GOTO 515
8159 '
8160 ' -- Redial Terminate
8165 PRINT#1,"A";:SOUND 700,30:SOUND SD,1:IF B1$=CHR$(0)+CHR$(32) THEN 6000
10901 ' -- Lines 11000-11010 mod to provide mult. line sends, using the <cr> sub. chr, in splt-scrn -Dennis Cheves-(904)376-0718
11000 IF B$=CR$ THEN RETPOS=INSTR(TMP$,XCR$):IF RETPOS=0 THEN LOCATE 25,1,0: PRINT CLIN$;:B$=TMP$:TMP$="":GOTO 11010 ELSE IF LEN(TMP$)>1 THEN GOTO 11005 ELSE TMP$="":XPOS=1:LOCATE 25,XPOS,1:GOTO 560 ELSE GOTO 11020